package org.llc.user.service;

import org.llc.common.model.Result;
import org.llc.user.dto.requst.*;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 用户认证Service
 *
 * @author llc
 * @date 2019/12/17 18:23
 * @since 1.0.0
 */
public interface IUserOauthService {

    /**
     * 密码模式
     * 用户名/手机号 密码 （图片验证码） 登录
     *
     * @param username          用户名/手机号
     * @param password          密码
     * @param verificationCode  图片验证码
     * @param key               验证码唯一键
     * @param authType          扩展授权类型
     * @param clientId          客户端ID
     * @param clientSecret      客户端密钥
     * @param scope             应用授权作用域
     * @return com.mogu.starter.base.bean.Result
     * @author llc
     * @date 2019/12/17 16:06
     */
    Result<Object> loginByUsernameAndPassword(String username,
                                      String password,
                                      String verificationCode,
                                      String key,
                                      String authType,
                                      String clientId,
                                      String clientSecret,
                                      String scope);

    /**
     * 获取授权码
     *
     * @param response                   响应体
     * @param reqGetAuthorizationCodeDto 获取授权码 DTO
     * @throws IOException               io异常
     * @author llc
     * @date 2020/5/7 9:58
     */
    void getAuthorizationCode(HttpServletResponse response, ReqGetAuthorizationCodeDTO reqGetAuthorizationCodeDto) throws IOException;

    /**
     * 授权码获取token
     * @param reqGetTokenByAuthorizationCodeDto 授权码获取token DTO
     * @return org.llc.common.model.Result
     * @author llc
     * @date 2020/5/6 16:47
     */
    Result getTokenByAuthorizationCode(ReqGetTokenByAuthorizationCodeDTO reqGetTokenByAuthorizationCodeDto);

    /**
     * 刷新token
     * reqRefreshTokenDTO 刷新tokenDTO
     * @return org.llc.common.model.Result
     * @author llc
     * @date 2020/5/13 12:57
     */
    Result refreshToken(ReqRefreshTokenDTO reqRefreshTokenDTO);

    /**
     * 手机号 + 验证码登录
     * @param reqPhoneLoginDTO  手机号验证码登录DTO
     * @return org.llc.common.model.Result
     * @author llc
     * @date 2020/5/14 12:53
     */
    Result loginByPhone(ReqPhoneLoginDTO reqPhoneLoginDTO);

    /**
     * 用户注册
     * @param phoneCode    短信验证码
     * @param phoneNumber  手机号
     * @param password     密码
     * @param shareCode    分享码
     * @return org.llc.common.model.Result
     * @author llc
     * @date 2020/5/14 14:45
     */
    Result userRegister(String phoneCode, String phoneNumber, String password, String shareCode);

    /**
     * 注册成功直接颁发令牌
     *
     * @param phoneNumber   用户手机号
     * @param clientId      客户端ID
     * @param clientSecret  客户端密钥
     * @param scope         授权作用域
     * @return org.llc.common.model.Result
     * @author llc
     * @date 2020/5/18 10:22
     */
    Result getTokenByUserRegister(String phoneNumber, String clientId, String clientSecret, String scope);

    /**
     * 微信授权登录
     * @param reqWeChatLoginDTO 微信授权登录DTO
     * @return org.llc.common.model.Result
     * @author llc
     * @date 2020/5/21 10:12
     */
    Result loginByWeChat(ReqWeChatLoginDTO reqWeChatLoginDTO);
}
